perm filename USERS.SAI[PUB,TES] blob
sn#151279 filedate 1975-03-14 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00014 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 BEGOF("USERS")
C00004 00003 PUBLIC SIMPLE PROCEDURE USERS! $"#
C00006 00004 IFSITE NOT TENEX THENK
C00010 00005 PUBLIC SIMPLE PROCEDURE DBURP $"#
C00012 00006 PUBLIC SIMPLE PROCEDURE DPUB!DEBUG $"#
C00013 00007 IFSITE TENEX THENK
C00014 00008 IFSITE NOT TENEX THENK
C00016 00009 IFSITE CMUVER THENK
C00017 00010 IFSITE NOT TENEX THENK
C00018 00011 IFSITE TENEX THENK
C00019 00012 PRIVATE SIMPLE STRING PROCEDURE SUBST(STRING STR, OLDS, NEWFIRST, NEWREST) $"#
C00020 00013 IFSITE TENEX THENK
C00025 00014 FINISHED
C00026 ENDMK
C⊗;
BEGOF("USERS")
COMMENT
*** Variations at Different Sites are Extensive ***
User interactions at startup and DEBUG times.
;
IFC TENEX THENC
DEFINE SUBCMDS= [11]; COMMENT NOT COUNTING ? AND CR ;
DEFINE DCASE= [1], XCASE= [2], TCASE= [3], MCASE= [4],
PCASE= [5], SCASE= [6],
YCASE= [7], NCASE= [8], ACASE= [9],
BCASE= [10], HCASE= [11],
QUESTCASE= [12], CRCASE= [13]; COMMENT ALWAYS LAST TWO ;
PRELOAD!WITH "ERROR", "DOCUMENT: ", "XGP", "TTY",
IFCR PARCVER THENC PARCMNEMONIC ELSEC "MIC" ENDC,
"PRINT DEBUG INFO", "SPREAD=",
"YES", "NO", "ASK", "BIG", "HUGE" ;
OWN STRING ARRAY COMPLETION[0:SUBCMDS] ;
PRELOAD!WITH "ERROR", "(OUTPUT FILE NAME)", "PRINT DEVICE",
"PRINT DEVICE (DEFAULT)", "PRINT DEVICE",
"(LINE NUMBERS AND ERRORS) IN MARGIN OF DOCUMENT",
"1 TO 9 (DEFAULT IS 1=SINGLE SPACE)",
"DO DELETE INTERMEDIATE FILES (DEFAULT)",
"DONT DELETE INTERMEDIATE FILES",
"TO DELETE INTERMEDIATE FILES",
"SYMBOL TABLE", "SYMBOL TABLE" ;
OWN STRING ARRAY EXPLANATION[0:SUBCMDS] ;
ENDC
PROCEDURES
IFCR CMUVER THENC
REQUIRE "PUBTMP.SAI" SOURCE!FILE ;
COMMENT RUNPROG, READTMPCOR, ETC. ;
ENDC
PUBLIC SIMPLE PROCEDURE USERS! ;$"#
BEGIN "USERS!"
IFC TENEX THENC
JOBNO ← CVS(GJINF(J, I, J)) ;
CONDIR ← DIRST(I) ;
ENDC TES 10/25/73 ;
IFC CMUVER THENC
JOBNO ← ("0" & CVS(CALL(0,"PJOB")))[∞-1 FOR 2];
PUIEXT ← "." & JOBNO & "I" ;
PUGEXT ← "." & JOBNO & "G" ;
PUZEXT ← "." & JOBNO & "Z" ;
ENDC RKJ: 6-FEB-75 ;
DOPASS3←FALSE; RKJ: 1-4-74;
ERRLF←FALSE; RKJ 6/25/74 ;
DEBUGFLAG ← -1 ; TES 8/21/74 ;
IFC CMUVER THENC
LIBPPN ← "[A700PU00]";
ENDC COMMENT RKJ 10-10-73;
IFC SAILVER THENC
LIBPPN ← IF EQU(CVXSTR(CALL(0,"DSKPPN"))[4 TO 6], "TES") THEN NULL ELSE "[1,3]" ;
ENDC
IFC ITSVER THENC PJ 5/27/74;
LIBPPN ← " COMMON;" ; PJ 5/28/74 THE SPACE IS SIGNIFICNAT ;
ENDC
IFC TENEX THENC LIBPPN ← IF EQU(CONDIR,"PUB") THEN "<PUB>" ELSE "<SUBSYS>" ; ENDC
JOBNAM ← IFC SAILVER THENC CV6STR(CALL(0,"GETNAM")) ELSEC "PUB" ENDC;
BH 3/14/75 THIS IS USED TO CHANGE THE NAME OF PUBSTD.DFS AND PUB2.DMP IN SORCE
AND RUNP2 RESPECTIVELY. OTHER SITES SHOULD SET IT RIGHT FOR THEM AND
ADD THE APPROPRIATE CODE IN SORCE AND RUNP2;
END "USERS!" ;
IFSITE NOT TENEX THENK
PUBLIC SITE(NOT TENEX) SIMPLE PROCEDURE ANYSTART(STRING COMDLINE) ;$"#
BEGIN "ANYSTART"
STRING OPTIONS, N, M ;
INTEGER EXT, PPN ;
IFC ITSVER PJ 5/28/74 ;
THENC SETBREAK(1, "←/()", CR&LF&FF, "INS")
ELSEC SETBREAK(1, "←/()", CR&LF&TB&FF&SP, "INS") ENDC ;
SETBREAK(4, ":", NULL, "IS") ; RKJ: 5-17-74 ;
SETBREAK(2, DIGS, SP, "XNS") ;
SETBREAK(3, ".[", NULL, "INR") ;
OUTFILE ← SCAN(COMDLINE, 1, BRC) ;
IF BRC NEQ "←" THEN BEGIN INFILE ← OUTFILE ; OUTFILE ← NULL END
ELSE INFILE ← SCAN(COMDLINE, 1, BRC) ; TES 8/14/74 SIMPLIFIED;
RKJ: 26-Sep-74 - CCL linkages;
IFC CMUVER THENC
IF INFILE[∞ FOR 1]="!" THEN
BEGIN
RUNPROG(INFILE[1 TO ∞-1],1); RKJ: fixed 7-Nov-74;
START!CODE CALLI 0,'12 END;
END;
ENDC
INCHAN ← OPENTOREAD(NULL, "Manuscript ", INFILE, PUBEXT, NULL) ;
IFILENAME ← CVXSTR(CVFIL(INFILE, EXT, INPPN)) ;
FULLFILE ← INFILE ; TES TEMPORARY 10/15/74 ;
IF NULSTR(OUTFILE) THEN
BEGIN
OUTFILE ← IFILENAME ;
GENREXT ← TRUE ;
END
ELSE BEGIN
CVFIL(OUTFILE, EXT, PPN) ;
GENREXT ← EXT=0 ;
END ;
TMPFILE ← IFILENAME & RPGEXT ;
WHILE BRC="/" DO OPTIONS ← OPTIONS & SCAN(COMDLINE,1,BRC) ;
IF BRC = "(" THEN DO OPTIONS ← OPTIONS & SCAN(COMDLINE,1,BRC) & (IF BRC="/" THEN BRC ELSE NULL)
UNTIL BRC = 0 OR BRC = ")";
IF FULSTR(OPTIONS) THEN
DO BEGIN
N ← SCAN(OPTIONS, 2, BRC) ;
IF "a" LEQ BRC LEQ "z" THEN BRC←BRC-'40; RKJ: 5-10-74 ;
RKJ: 5-10-74 got rid of all lower case below ;
IF BRC = "D" THEN DEBUG ← -1
ELSE IF BRC = "S" THEN PREFMODE ← IF NULSTR(N) THEN 1 ELSE CVD(N)
ELSE IF BRC = "M" THEN DEVICE ← -MIC
ELSE IF BRC = "T" THEN DEVICE ← -TTY
ELSE IF BRC = "L" THEN DEVICE ← -LPT
ELSE IF BRC = "X" THEN DEVICE ← -XGP RKJ;
ELSE IF BRC="N" OR BRC="Y" OR BRC="A" THEN DELINT ← BRC
ELSE IF BRC = "B" THEN SYMNO ← BIG!SIZE - 1
ELSE IF BRC = "H" THEN SYMNO ← HUGE!SIZE - 1
ELSE IF BRC = "P" AND OPTIONS = "U" THEN
OPTIONS ← OPTIONS[3 TO ∞] COMMENT /PUB ;
ELSE IF BRC NEQ 0 THEN EARLYWARNING("Never heard of a " & BRC & " option") ;
END
UNTIL BRC = 0 ;
FOR DUMMY←1 THRU 4 DO BREAKSET(DUMMY, NULL, "O") ; RKJ: 5-17-74 ;
END "ANYSTART" ;
ENDC
PUBLIC SIMPLE PROCEDURE DBURP ;$"#
BEGIN TES 8/19/74 DEBUG PRINTOUTS ;
BOOLEAN VERBOSE ; INTEGER I ;
IF ON AND NOT SWDBACK THEN BEGIN OUTSTR(CRLF); SWDBACK←TRUE END ;
PASS ;
IF ITS(INPUT) THEN
BEGIN
PASS ;
VERBOSE ← IF ITS(VERBOSE) THEN IPASS(TRUE) ELSE FALSE ;
IF ON THEN BURPINPUT(VERBOSE) ;
END
ELSE IF ITS(AREAS) THEN
BEGIN
PASS ;
VERBOSE ← IF ITS(VERBOSE) THEN IPASS(TRUE) ELSE FALSE ;
IF ON THEN BURPAREAS(VERBOSE) ;
IF STATUS>-1 AND COMMENT EVEN IF NOT ON, CHECK ;
(WHATIS(THISAREA) NEQ AREAIDA OR WHATIS(AA) NEQ AAA OR
(I←DEFA) AND I NEQ AREAIXM)
THEN WARN(NULL,"ARRAYS AND IDAS DISAGREE: PUB BUG!" & CRLF) ;
END
ELSE WARN(NULL, "Unrecognized BURP command " & THISWD) ;
END "DBURP" ;
PUBLIC SIMPLE PROCEDURE DPUB!DEBUG ;$"#
IF NOT ON THEN PASS ELSE
BEGIN "BUGLOOP"
BOOLEAN T; RKJ: 6-FEB-75 SAVE AUTOCRLF;
STRING INPT ;
T←AUTOCRLF ; AUTOCRLF←TRUE ;
IF FULSTR(INPT←TYPEIN) THEN
BEGIN
SWICH("TTY←" & SUBST(SUBST(INPT,TB,SP,SP),
CRLF&"##", ";"&CRLF&TB, CRLF&TB) & TES 8/23&25/74;
(CRLF & TB & TB & "PUB!DEBUG" & CRLF & TB & TB),
-1, 0) ;
PASS ;
END
ELSE PASS ;
AUTOCRLF←T ;
END "BUGLOOP" ;
IFSITE TENEX THENK
PRIVATE SITE(TENEX) SIMPLE INTEGER PROCEDURE ININTEGER(INTEGER NUMBER) ;$"#
BEGIN
INTEGER N, I ;
I ← -1 ;
DO BEGIN
N ← INCHRW ;
IF N="?" THEN
BEGIN
OUTSTR(EXPLANATION[NUMBER]) ;
N ← IF I<0 THEN INCHRW ELSE RUBOUT ;
END ;
IF N=ALTMODE OR N=EOL OR N=SP THEN
BEGIN
IF I<0 THEN OUTSTR(CVS(I←1)) ;
IF N NEQ EOL THEN OUTSTR(CRLF) ;
RETURN(I) ;
END ;
IF "1" LEQ N AND N LEQ "9" THEN
I ← IF I<0 THEN N-"0" ELSE 10*I+(N-"0")
ELSE BEGIN OUTSTR("XXX"&CRLF) ; RETURN(-1) END ;
END
UNTIL FALSE ;
END "ININTEGER" ;
ENDC
IFSITE NOT TENEX THENK
PUBLIC SITE(NOT TENEX) SIMPLE PROCEDURE RPGSTART ;$"#
IFC CMUVER THENC
BEGIN "RPGSTART"
STRING CMD,OTHER!CMDS; LABEL NORPG;
IF NOT RTMPFILE("PUB",OTHER!CMDS,TRUE,TRUE) THEN
NORPG: BEGIN RPGSW←FALSE; SSTART; RETURN END;
SETBREAK(1,LF,CR,"IS");
DO CMD←SCAN(OTHER!CMDS,1,DUMMY) UNTIL (FULSTR(CMD) OR NULSTR(OTHER!CMDS));
IF NULSTR(CMD) THEN GO NORPG;
IF FULSTR(OTHER!CMDS) THEN WTMPFILE("PUB",OTHER!CMDS,TRUE);
OTHER!CMDS←NULL;
ANYSTART(CMD);
OUTSTR("PUB: ");
CMD←NULL;
END "RPGSTART" ;
ELSEC
BEGIN "RPGSTART"
STRING CMD ;
EOF ← 0 ; OPEN(0, "DSK", 0, 1, 0, 50, BRC, EOF) ;
LOOKUP(0, "QQPUB"&RPGEXT, FLAG) ; TES 8/14/74 SIMPLIFIED ;
IF FLAG THEN EARLYWARNING("RPG PROBLEM: QQPUB.RPG NONEXISTENT") ;
SETBREAK(1, LF, CR, "INS") ;
CMD ← INPUT(0,1) ;
ANYSTART(CMD) ; RELEASE(0) ;
END "RPGSTART" ;
ENDC
ENDC
IFSITE CMUVER THENK
PUBLIC SITE(CMUVER) SIMPLE PROCEDURE RUNLIBPROG(STRING FILENAME) ;$"#
RUNPROG(LIBDEV & ":" & FILENAME & LIBPPN, 1) ;
ENDC
IFSITE NOT TENEX THENK
PUBLIC SITE(NOT TENEX) SIMPLE PROCEDURE SSTART ;$"#
BEGIN "SSTART"
STRING S ;
DO BEGIN OUTCHR("*"); S←INCHWL; END UNTIL FULSTR(S);
ANYSTART(S);
END "SSTART";
ENDC
IFSITE TENEX THENK
PRIVATE SITE(TENEX) SIMPLE BOOLEAN PROCEDURE SUBCOMMAND(INTEGER NUMBER) ;$"#
BEGIN
INTEGER N ;
OUTSTR(COMPLETION[NUMBER][2 TO ∞]) ;
N ← INCHRW ;
IF N="?" OR N=ALTMODE THEN
BEGIN
OUTSTR(SP & EXPLANATION[NUMBER]) ;
N ← INCHRW ;
END ;
IF N=CR OR N=EOL THEN RETURN(TRUE) ;
IF N=ALTMODE OR N=SP THEN
BEGIN OUTSTR(CRLF) ; RETURN(TRUE) ; END ;
OUTSTR("XXX"&CRLF) ; RETURN(FALSE) ;
END "SUBCOMMAND" ;
ENDC
PRIVATE SIMPLE STRING PROCEDURE SUBST(STRING STR, OLDS, NEWFIRST, NEWREST) ;$"#
BEGIN TES 8/23/74 FOR PUB!DEBUG AT LEAST ;
INTEGER WHICH ; TES 8/23/74 ;
STRING S ;
S ← NULL ; WHICH ← 0 ;
WHILE FULSTR(STR) DO
IF EQU(STR[1 TO LENGTH(OLDS)], OLDS) THEN
BEGIN
S ← S & (IF (WHICH←WHICH+1)=1 THEN NEWFIRST ELSE NEWREST) ;
STR ← STR[LENGTH(OLDS)+1 TO ∞] ;
END
ELSE S ← S & LOP(STR) ;
RETURN(S) ;
END "SUBST" ;
IFSITE TENEX THENK
PUBLIC SITE(TENEX) SIMPLE PROCEDURE TENEXSTART ;$"#
BEGIN
INTEGER THECHR ; TES 10/22/74 PREFER <CR> AFTER <COMMA> ;
INTEGER N ; BOOLEAN DUN ;
PRELOAD!WITH
[13]0, CRCASE, [17]0, CRCASE,
[31]0, QUESTCASE,
0, ACASE, BCASE, 0, DCASE, 0, 0, 0,
HCASE, 0, 0, 0, 0, MCASE, NCASE, 0,
PCASE, 0, 0, SCASE, TCASE, 0, 0, 0,
XCASE, YCASE, 0, [5]0,
0, ACASE, BCASE, 0, DCASE, 0, 0, 0,
HCASE, 0, 0, 0, 0, MCASE, NCASE, 0,
PCASE, 0, 0, SCASE, TCASE, 0, 0, 0,
XCASE, YCASE, 0, [5]0 ;
OWN INTEGER ARRAY CNVCASE[0:127] ;
IFCR PARCVER THENC PARCASE ; ENDC
OUTFILE ← NULL ;
DO BEGIN "GTINCHAN" TES 6/11/74 ;
OUTSTR("MANUSCRIPT: ") ;
WHILE -1 = (INCHAN ←
GTJFNL(NULL, '162000000000, '100000101,
NULL, NULL, NULL, "PUB", NULL, NULL, NULL)) DO
OUTSTR(" ?" & CRLF & "MANUSCRIPT: ") ;
OPENF(INCHAN, 2) ;
IF !SKIP! THEN
BEGIN
OUTSTR("CAN'T OPEN MANUSCRIPT; IS PROTECTION OK?"&CRLF) ;
RLJFN(INCHAN) ;
END
ELSE DONE ;
END "GTINCHAN"
UNTIL FALSE ;
INFILE ← JFNS(INCHAN, 0) ;
FULLFILE ← JFNS(INCHAN, '211110040001) ; TES 10/15/74 ;
INPPN ← JFNS(INCHAN, '10000000001) ;
IFILENAME ← JFNS(INCHAN, '1000000000) ;
EOF ← 0 ; SETINPUT(INCHAN, 150, BRC, EOF) ;
DUN ← FALSE ;
BKJFN('100) ; COMMENT WAS THE CONFIRM WITH A COMMA? ;
IF CHARIN('100) = "," THEN
BEGIN "SUBCOMMANDS"
IF (THECHR←INCHRW)=EOL THEN THECHR←0 ELSE OUTSTR(CRLF) ;
DO BEGIN
OUTSTR("@@") ;
CASE CNVCASE[IF THECHR THEN THECHR ELSE INCHRW] OF
BEGIN
[0] OUTSTR("?"&CRLF) ;
[DCASE] BEGIN
OUTSTR(COMPLETION[DCASE][2 TO ∞]) ;
N ← GTJFNL(NULL, '462000000000,
'100000101, NULL, NULL, IFILENAME,
"DOC", NULL, NULL, NULL) ;
IF N=-1 THEN OUTSTR("XXX"&CRLF)
ELSE BEGIN
OUTFILE ← JFNS(N, 0) ;
RLJFN(N) ; OUTSTR(CRLF) ;
GENREXT ← FALSE ;
END ;
END ;
[XCASE] IF SUBCOMMAND(XCASE) THEN DEVICE←-XGP ;
[TCASE] IF SUBCOMMAND(TCASE) THEN DEVICE←-TTY ;
[MCASE] IF SUBCOMMAND(MCASE) THEN DEVICE←-MIC ;
[PCASE] IF SUBCOMMAND(PCASE) THEN DEBUG←-1 ;
[SCASE] BEGIN
OUTSTR(COMPLETION[SCASE][2 TO ∞]) ;
IF (N←ININTEGER(SCASE))>0 THEN PREFMODE←N ;
END ;
[YCASE] IF SUBCOMMAND(YCASE) THEN DELINT←"Y" ;
[NCASE] IF SUBCOMMAND(NCASE) THEN DELINT←"N" ;
[ACASE] IF SUBCOMMAND(ACASE) THEN DELINT←"A" ;
[BCASE] IF SUBCOMMAND(BCASE) THEN SYMNO←BIG!SIZE-1 ;
[HCASE] IF SUBCOMMAND(HCASE) THEN SYMNO←HUGE!SIZE-1 ;
[QUESTCASE]
BEGIN
OUTSTR("PUB SUBCOMMANDS ARE:"&CRLF) ;
FOR N ← 1 THRU SUBCMDS DO
OUTSTR(" "&COMPLETION[N] & SP &
EXPLANATION[N] & CRLF) ;
OUTSTR("CR AFTER EACH, CR AT END"&CRLF) ;
END ;
[CRCASE] DUN ← TRUE
END ;
THECHR ← 0 ;
END
UNTIL DUN ;
END "SUBCOMMANDS" ;
XCRIBL ← DEVICE = -XGP ;
IF NULSTR(OUTFILE) THEN
BEGIN TES 10/22/74 ;
OUTFILE ← IFILENAME ;
GENREXT ← TRUE ;
END ;
END "TENEXSTART" ;
ENDC
FINISHED
ENDOF("USERS")